home *** CD-ROM | disk | FTP | other *** search
/ Black Crawling Systems Archive Release 1.0 / Black Crawling Systems Archive Release 1.0 (L0pht Heavy Industries, Inc.)(1997).ISO / advisories / sendmail_875_advisory < prev    next >
Text File  |  1997-07-17  |  3KB  |  105 lines

  1.  
  2.                    [ advisory released Sept 1996 ]
  3.  
  4.                        L0pht Security Advisory
  5.  
  6.                      Application: Sendmail 8.7.5
  7.                            Platforms: All
  8.                    Severity: any local user can gain
  9.                              root priveledges.
  10.                        Author: mudge@l0pht.com
  11.  
  12. Scenario:
  13.  
  14. Due to a problem with the code in sendmail a buffer overflow condition
  15. exists that allows a user to overwrite the information in a saved
  16. stack frame. When the function returns, the saved frame is popped off of
  17. the stack and user code can be executed.
  18.  
  19. An exploit script will be made public upon the actual release of
  20. Sendmail 8.8 which fixes this particular exploitable code segment.
  21.  
  22. Example:
  23.  
  24.   > id
  25.   uid=621(mudge) gid=200(users)
  26.   > ./sploit.sh 3883
  27.   chfn: rebuilding the database...
  28.   chfn: done
  29.   using arg of [0x-------- (hex) + 3883(dec)]
  30.   # id
  31.   uid=621(mudge) euid=0(root) gid=200(users)
  32.   # ./up
  33.   # id
  34.   uid=0(root) gid=200(users)
  35.  
  36. If a user is able to alter his/her gecos field then that user can
  37. exploit a coding flaw in sendmail to elevate their effective UID to 0.
  38.  
  39. Various operating systems ship with chfn(1) which enables users to
  40. change their gecos field. Some of the operating systems that ship with
  41. this program are NetBSD, FreeBSD, BSDI, OpenBSD, and Linux. It has
  42. not been extensively researched as to what others come out of the
  43. box with this functionality. Even if your operating system does not
  44. ship with this functionality, it has been witnessed that many service
  45. providers offering shell accounts add these, or equivalent utils,
  46. in order to minimize their administrative tasks and to facilitate
  47. user functionality. No matter, the flaw is a coding problem in sendmail and
  48. not the fact that these other programs exist.
  49.  
  50. The actual problem in the code is quite apparent.
  51.  
  52.   Inside recipient.c we find the following:
  53.  
  54.   char nbuf[MAXNAME + 1];
  55.   ...
  56.   buildfname(pw->pw_gecos, pw->pw_name, nbuf);
  57.  
  58. The problem is that nbuf[MAXNAME + 1] is a fixed length buffer and as
  59. we will soon see, buildfname() does not honor this.
  60.  
  61. from util.c:
  62.  
  63. void
  64. buildfname(gecos, login, buf)
  65.         register char *gecos;
  66.         char *login;
  67.         char *buf;
  68. {
  69.         register char *p;
  70.         register char *bp = buf;
  71.         int l;
  72.         ...
  73.         /* now fill in buf */
  74.         for (p = gecos; *p != '\0' && *p != ',' && *p != ';' && *p != '%'; p++)
  75.         {
  76.                 if (*p == '&')
  77.                 {
  78.                         (void) strcpy(bp, login);
  79.                         *bp = toupper(*bp);
  80.                         while (*bp != '\0')
  81.                                 bp++;
  82.                 }
  83.                 else
  84.                         *bp++ = *p;
  85.         }
  86.         *bp = '\0';
  87. }
  88.  
  89. Here we see that buildfname() happily copies whatever size we can hand
  90. it into nbuf[MAXNAME +1]. The function is even nice enough to append
  91. a null to the string in case we wanted to put our machine opcodes and
  92. operands inside the gecos field. Though this is one way of doing it,
  93. we opted for another method that enabled us more freedom with the
  94. various methods of altering ones gecos field.
  95.  
  96. Solution:
  97.  
  98. This particular problem has been fixed in Sendmail 8.8 beta.
  99.  
  100. A temporary fix is to remove the ability for users on a local system
  101. to change their gecos (commonly referred to as 'real-name') field.
  102.  
  103. mudge@l0pht.com
  104.  
  105.